Skip to main content

find(), some(), every()

find()

[3, 2, 0, 1] --> 3

Возвращает элемент массива. Метод для поиска элемента внутри массива. Возвращает первый найденный элемент. Возвращает из из массива то, что найдет.

const a = [
{ id: 3, name: 'Не указан' },
{ id: 2, name: 'Тестовый статус' },
{ id: 0, name: 'Старый тестовый статус' },
{ id: 1, name: 'Что то происходит' },
];

// поиск по совпадению
const b = a.find((el, index, thisArray) => el.id === 3); // { 3 }

// поиск по несовпадению
const с = a.find((el, index, thisArray) => el.id !== 3); // { 2 } - вернется первый элемент

Обновление одного объекта в массиве

// есть массив аптек
const { drugstores } = store.getState().map;

// есть аптека в этом массиве, в которой нужно изменить какое-ниб поле
const drugstoreId = 123;
const updatedDrugstore = drugstores.find(
drugstore => drugstore.id === drugstoreId,
);

// перезатираем поле comment новым значением
const updatedDrugstoreData = {
...updatedDrugstore,
comment: 'Some new comment',
};

// обновляем список аптек, сначала исключаем эту аптеку со старыми данными и добавляем с новыми
dispatch(
setDrugstores([
...drugstores.filter(drugstore => drugstore.id !== drugstoreId),
updatedDrugstoreData as IDrugstoreOnMap,
]),
);

findIndex()

Если ничего не найдено вернется -1.

const a = [
{ id: 3, name: 'Не указан' },
{ id: 2, name: 'Тестовый статус' },
{ id: 0, name: 'Старый тестовый статус' },
{ id: 1, name: 'Что то происходит' },
];

// вернет индекс массива по совпадению
const index = a.findIndex((el, index, thisArray) => {
return el.name === 'Что то происходит'; // 3
});

some()

Проверяет элемент массива на соответствие какому-либо УСЛОВИЮ. Возвращает true, если хотя бы один элемент true. Когда "наткнётся" на первое true, то цикл прекращается и возвращается true.

const a = [
{ id: 3, name: 'Не указан' },
{ id: 2, name: 'Тестовый статус' },
{ id: 0, name: 'Старый тестовый статус' },
{ id: 1, name: 'Что то происходит' },
];

a.some((el, index, array) => el.id === 3); // true
a.some((el, index, array) => el.id === 33); // false


// example
const onSelectDeck = (clickedDeck: TDeckObj) => {
const isAlreadyExists = selectedDecks.some((deck) => deck.id === clickedDeck.id);

if (!isAlreadyExists) {
// add selected deck
if (selectedDecks.length < 10) {
setSelectedDecks([...selectedDecks, clickedDeck]);
}
} else {
// remove deck if already exists
setSelectedDecks(selectedDecks.filter((deck) => deck.id !== clickedDeck.id));
}
};

every()

Проверяет ВСЕ элементы массива на соответствие какому-либо УСЛОВИЮ. Возвращает false, если хотя бы один элемент false. Когда "наткнётся" на первый false, то цикл прекращается и возвращается false

const a = [
{ id: 3, name: 'Не указан' },
{ id: 2, name: 'Тестовый статус' },
{ id: 0, name: 'Старый тестовый статус' },
{ id: 1, name: 'Что то происходит' },
];

a.every((el, index, array) => el.id >= 0); // true
a.every((el, index, array) => el.id > 0); // false

import { EPermission } from 'interfaces/auth';
import { useSelector } from 'react-redux';
import { TStore } from 'store/store';

const useAccess = (permissions: EPermission[]): boolean => {
const userPermissions = useSelector(
(store: TStore) => store.auth.permissions,
);

return permissions.every(permission => userPermissions.includes(permission));
};

export default useAccess;
const big = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];

[1, 2, 3].every(item => big.includes(item)); // true
[0, 1, 2, 3].every(item => big.includes(item)); // false